// 订单列表项组件

import {
  payNow,
  getTargetPage,
  cancelOrder,
  showCancelActionSheet
} from '../../../util/tools'
import {
  deleteOrder,
  getOrder,
  alterOrderStatus
} from '../../../api/orderApi'
import {
  goodsSelectAmountPlus
} from '../../../api/cartApi'

const computedBehavior = require('miniprogram-computed')
Component({
  behaviors: [computedBehavior],
  /**
   * 组件的属性列表
   */
  properties: {
    order: {
      type: Object
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    // status: '',
    // showCancel: false, //是否显示取消订单按钮
    // showPay: false, //是否显示立即支付按钮
  },
  /**
   * 计算属性
   */
  computed: {
    /**
     * 计算订单的状态
     * @param {data} data 
     */
    status(data) {
      // 注意： computed 函数中不能访问 this ，只有 data 对象可供访问
      // 这个函数的返回值会被设置到 this.data.sum 字段中
      if (data.order !== null) {
        let status = data.order.status
        // console.log("订单的状态:", status);
        switch (status) {
          case 'waitPay':
            return "待付款"
          case 'waitReceive':
            return "待收货"
          case 'completed':
            return "已完成"
          case 'refunded':
            return "已退款"
          case 'inAfterSale':
            return "售后中"
          case 'afterSaleCompleted':
            return "售后已完成"
          default:
            return "已取消"
        }
      }
    },
    /**
     * 计算是否显示取消订单按钮
     */
    showCancel(data) {
      if (data.order !== null) {
        let status = data.order.status
        return status !== "completed" && status !== 'handCancel' && status !== 'timeoutCancel' && status !=='waitReceive'
      }
      return false
    },
    /**
     * 计算是否显示立即支付按钮
     * @param {data} data 
     */
    showPay(data) {
      if (data.order !== null) {
        let status = data.order.status
        return status === "waitPay"
      }
    }
  },
  lifetimes: {
    attached() {}
  },
  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 支付订单
     */
    handlePay() {
      console.log("提示用户支付:", this.data.order);
      let money = this.data.order.resultmoney
      let id = this.data.order.id
      payNow(money, id).then(() => {
        console.log("用户点击确认支付后...................");
        getApp().orderPayment("商水超市-精品商品", parseInt(money*100)).then((res) => {
          console.log("支付完成的操作");
          //如果支付成功,修改订单的状态
          if (res.errMsg == "requestPayment:ok") {
            //修改订单的状态 此时订单状态为已支付->待收货
            alterOrderStatus(id, "waitReceive").then((res) => {
              console.log("修改订单状态成功:", res);
              wx.showToast({
                title: '支付成功'
              })
            }).catch((err) => {
              console.log("修改订单状态出现异常:", err)
            })
          } else {
            //requestPayment:fail cancel
            wx.showToast({
              title: '您取消了支付',
              icon: 'error'
            })
          }
          this.triggerEvent("orderchange", {
            flag: 1
          })
        })
      }).catch((err) => {
        console.log("用户点击了取消支付:", err);
      })

    },
    /**          
     * 取消订单
     */
    cancelOrder() {
      console.log("取消订单,显示上拉菜单选择取消订单原因");
      showCancelActionSheet().then((res) => {
        console.log("取消订单原因选择成功:", res);
        //根据取消原因进行相应的处理
        this.handleCancel(res)
      }).catch((err) => {
        console.log("取消订单失败:", err);
      })
    },
    /**
     * 刷新我的订单页面
     */
    flushMyOrders() {
      //跳转到当前的订单列表页面
      let pages = getCurrentPages()
      // console.log("当前获取到的page数组========================:",pages);
      let page = getTargetPage(pages, "pages/my/myOrders/myOrders")
      //  console.log("获取到的page对象:",page);
      let active = page.data.active
      console.log("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<触发刷新订单列表事件>>>>>>>>>>>>>>>>>：",active);
      //触发订单列表页面的自定义刷新事件
      this.triggerEvent('flush',{},{})
      // wx.navigateTo({
      //   url: '/pages/my/myOrders/myOrders?active=' + active,
      // })
    },

    /**
     * 根据选择的取消订单的原因进行相应的处理
     * @param {res} res 取消订单的原因
     */
    handleCancel(res) {
      let id = this.data.order.id
      console.log("订单列表页面,要取消的订单的id", id);
      let goodsList;
      let refThis = this
      getOrder(id).then((re) => {
        console.log("取消订单时获取的订单详细信息:", re);
        goodsList = re.data.orderDetails.ordergoods
        console.log("goodsList=>", goodsList);
        switch (res) {
          case "cancelOrder":
            //取消订单
            refThis.handlecancelOrder(id)
            break;
          case "addressErr":
            //然后回到提交订单页面,需要先请求订单中的商品列表
            refThis.handleAddressErr(id, goodsList)
            break;
          case "goodsErr":
            //商品选错了,将商品放入购物车,然后删除订单,跳转到购物车页面
            refThis.handleGoodsErr(id, goodsList)
            break;
          default:
            console.log("没有选择取消订单原因");
            break;
        }
      }).catch((err) => {
        console.log("取消订单时获取订单的详细信息失败:", err);
      })
    },
    /**
     * 处理直接取消订单,取消订单原因为不想买了或者其他
     */
    handlecancelOrder(id) {
      cancelOrder(id).then((res) => {
        console.log("取消订单成功");
        wx.showToast({
          title: '订单已取消',
          duration: 800
        })
      })
      //触发自定义的事件,用于刷新订单列表
      this.triggerEvent("orderchange", {
        flag: 2
      })
      // this.flushMyOrders()
    },
    /**
     * 处理收货地址选错了
     * @param {id} id 
     * @param {goodsList} goodsList 
     */
    handleAddressErr(id, goodsList) {
      deleteOrder(id).then((res) => {
        console.log("订单删除成功");
        //跳转到提交订单页面
        wx.navigateTo({
          url: '/pages/submit-order/submit-order',
          success(res) {
            res.eventChannel.emit("acceptDataFromCartPage", {
              goodsList
            })
          }
        })
      }).catch((err) => {
        console.log(err);
      })
    },
    /**
     * 处理商品选错了的取消订单情况
     */
    handleGoodsErr(id, goodsList) {
      let addCount;
      goodsList.forEach(element => {
        console.log("要添加的商品:", element);
        // goodsSelectAmountPlus
        let good = {
          goods_id: element.id,
          specificationid: element.specid,
          amount: element.count
        }
        goodsSelectAmountPlus(good).then(rs => {
          console.log("添加到购物车成功");
          addCount++;
        }).catch(err => {
          console.log("添加到购物车失败");
        })
      });
      console.log("购物车徽标已初始化-----------------------------");
      deleteOrder(id).then((r) => {
        console.log("取消订单时删除订单成功", r);
        wx.switchTab({
          url: '/pages/cart/index',
        })
      }).catch((err) => {
        console.log("取消订单时删除订单失败:", err);
      })
    },
  },


})